#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
生成 database.json 文件
将所有单词按主题分类到关卡中
"""

import json
import os
from pathlib import Path

# 主题分类规则
THEMES = {
    "fruits": {
        "id": "fruits",
        "name": "水果森林",
        "icon": "🍎",
        "keywords": ["苹果", "香蕉", "橙子", "葡萄", "草莓", "西瓜", "桃子", "梨", "柠檬", 
                    "樱桃", "芒果", "菠萝", "猕猴桃", "蓝莓", "石榴", "荔枝", "龙眼"]
    },
    "animals": {
        "id": "animals",
        "name": "动物农场",
        "icon": "🐶",
        "keywords": ["狗", "猫", "猪", "羊", "牛", "马", "鸡", "鸭", "鹅", "兔子", "老鼠",
                    "熊", "狮子", "老虎", "大象", "长颈鹿", "猴子", "熊猫", "考拉", "企鹅",
                    "狐狸", "狼", "鹿", "斑马", "公鸡", "奶牛", "山羊", "孔雀", "天鹅"]
    },
    "vegetables": {
        "id": "vegetables",
        "name": "蔬菜花园",
        "icon": "🥕",
        "keywords": ["胡萝卜", "土豆", "西红柿", "黄瓜", "白菜", "菠菜", "生菜", "洋葱",
                    "大蒜", "南瓜", "茄子", "豆角", "玉米", "青椒", "甜椒", "蘑菇"]
    },
    "transportation": {
        "id": "transportation",
        "name": "交通小镇",
        "icon": "🚗",
        "keywords": ["汽车", "小汽车", "公共汽车", "公交车", "火车", "飞机", "自行车", "摩托车",
                    "出租车", "卡车", "轮船", "小船", "帆船", "游艇", "直升机", "救护车",
                    "消防车", "警车", "压路机", "挖掘机", "叉车", "拖拉机", "三轮车",
                    "独轮车", "滑板", "滑板车", "战斗机", "垃圾车", "水泥搅拌车",
                    "自卸卡车", "快艇", "独木舟", "皮划艇", "渡轮", "气垫船", "潜水艇", "潜艇"]
    },
    "food": {
        "id": "food",
        "name": "美食天地",
        "icon": "🍔",
        "keywords": ["米饭", "面包", "面条", "饺子", "包子", "馒头", "汉堡包", "三明治",
                    "披萨", "热狗", "薯条", "鸡蛋", "牛奶", "果汁", "咖啡", "茶",
                    "冰淇淋", "蛋糕", "饼干", "糖果", "巧克力", "布丁", "甜甜圈",
                    "华夫饼", "煎饼", "寿司", "意大利面", "千层面", "肉酱意面",
                    "奶油培根意面", "凯撒沙拉", "炸鱼薯条", "炸鸡", "烤鸡", "牛排",
                    "羊肉派", "肉馅饼", "俄式炖牛肉", "法式吐司", "法式乳蛋派",
                    "希腊卷饼", "希腊茄子千层", "帕尔马风味鸡排", "泰式炒河粉",
                    "日式拉面", "新奥尔良杂烩饭", "加拿大肉汁奶酪薯条", "意大利饺",
                    "三文鱼", "扇贝", "牡蛎", "芝士汉堡", "烤芝士三明治", "生日蛋糕",
                    "纸杯蛋糕", "巧克力蛋糕", "派", "棉花糖", "棒棒糖", "爆米花",
                    "玉米片", "玉米饼", "咖喱", "汤", "浓汤", "沙拉", "烤排骨",
                    "汉堡", "热巧克力", "橙汁", "柠檬水", "冰沙", "奶茶", "汽水"]
    },
    "household": {
        "id": "household",
        "name": "家务小帮手",
        "icon": "🧹",
        "keywords": ["扫地", "拖地", "掸灰", "吸尘", "浇花", "叠衣服", "铺床", "洗衣服",
                    "洗碗", "倒垃圾", "擦窗户", "整理房间"]
    },
    "emotions": {
        "id": "emotions",
        "name": "情感世界",
        "icon": "😊",
        "keywords": ["开心的", "伤心的", "生气的", "害怕的", "惊讶的", "兴奋的", "困", "累",
                    "疲倦的", "害羞的", "尴尬", "失望", "焦虑", "担心的", "激动", "好奇",
                    "自豪的", "兴高采烈的", "困倦的", "舒服的", "精力充沛的"]
    },
    "body": {
        "id": "body",
        "name": "身体部位",
        "icon": "👋",
        "keywords": ["头", "眼睛", "鼻子", "嘴巴", "耳朵", "手", "脚", "腿", "胳膊",
                    "手指", "脚趾", "头发", "牙齿", "脖子", "肩膀", "膝盖", "手臂",
                    "背部", "胸", "肚子", "下巴", "前额", "眉毛", "睫毛", "脸颊",
                    "手腕", "脚踝", "肘部", "腰部", "臀部", "脸"]
    },
    "actions": {
        "id": "actions",
        "name": "动作世界",
        "icon": "🏃",
        "keywords": ["跑", "走", "跳", "坐", "站", "躺", "睡", "吃", "喝", "写", "读",
                    "唱歌", "跳舞", "游泳", "爬", "飞", "笑", "哭", "看", "听",
                    "亲吻", "挥手", "指", "握手", "鞠躬", "伸展", "弯腰", "爬行",
                    "做鬼脸", "假笑", "咧嘴笑", "咯咯笑", "得意地笑", "微笑",
                    "撅嘴", "皱眉", "眨眼", "摇头", "点头", "吹口哨", "打哈欠",
                    "打喷嚏", "咳嗽", "吹气", "吮吸", "吞咽", "咀嚼", "咬", "舔",
                    "啜饮", "握拳", "捏", "抓住", "摇", "扭动"]
    },
    "rooms": {
        "id": "rooms",
        "name": "房间探险",
        "icon": "🏠",
        "keywords": ["卧室", "客厅", "厨房", "浴室", "洗手间", "书房", "餐厅", "阳台",
                    "地下室", "婴儿房", "洗衣房"]
    },
    "furniture": {
        "id": "furniture",
        "name": "家具世界",
        "icon": "🛋️",
        "keywords": ["床", "桌子", "椅子", "沙发", "书架", "柜子", "书桌", "凳子",
                    "台灯", "衣柜", "梳妆台", "茶几", "橱柜", "架子", "抽屉", "储物柜"]
    },
    "kitchen": {
        "id": "kitchen",
        "name": "厨房用具",
        "icon": "🍳",
        "keywords": ["刀", "叉子", "勺子", "筷子", "碗", "盘子", "杯子", "锅", "平底锅",
                    "冰箱", "微波炉", "烤箱", "烤面包机", "搅拌机", "打蛋器", "刨丝器",
                    "削皮器", "开瓶器", "开罐器", "漏斗", "滤网", "擀面杖", "砧板",
                    "汤勺", "托盘", "水壶"]
    },
    "cooking": {
        "id": "cooking",
        "name": "烹饪动作",
        "icon": "👨‍🍳",
        "keywords": ["切", "切片", "切丁", "切丝", "削皮", "刨皮", "剁碎", "去核",
                    "炒", "煮", "炖", "蒸", "烤", "烤制", "煎", "煎烤", "炸", "焖",
                    "烘焙", "烧烤", "水煮", "煮沸", "小火煨", "烟熏", "发酵", "腌制",
                    "搅拌", "拌", "揉", "揉搓", "混合", "打发", "摇", "撇去浮沫",
                    "捣碎", "磨碎", "筛", "浇汁", "涂抹", "淋", "包装", "冷藏",
                    "浸泡", "挤压"]
    },
    "clothes": {
        "id": "clothes",
        "name": "服装世界",
        "icon": "👕",
        "keywords": ["衣服", "T恤", "裤子", "牛仔裤", "裙子", "连衣裙", "外套", "夹克",
                    "毛衣", "衬衫", "短裤", "袜子", "鞋子", "帽子", "手套", "围巾",
                    "领带", "腰带", "睡衣", "泳衣", "背心", "紧身裤", "制服", "围裙",
                    "凉鞋", "拖鞋", "靴子", "运动鞋", "雨衣", "雨鞋"]
    },
    "accessories": {
        "id": "accessories",
        "name": "配饰小屋",
        "icon": "👓",
        "keywords": ["眼镜", "太阳镜", "项链", "耳环", "戒指", "手链", "手表", "帽子",
                    "发夹", "头盔", "背包", "书包", "钱包", "手提包", "泳帽", "泳镜",
                    "胸针"]
    },
    "school": {
        "id": "school",
        "name": "学校时光",
        "icon": "📚",
        "keywords": ["学校", "教室", "老师", "教师", "学生", "课桌", "黑板", "白板",
                    "粉笔", "书", "笔记本", "铅笔", "钢笔", "橡皮", "橡皮擦", "尺子",
                    "圆规", "剪刀", "胶水", "胶带", "卷笔刀", "书包", "文具盒",
                    "课本", "作业", "家庭作业", "考试", "成绩", "文件夹", "活页夹",
                    "便利贴", "修正带", "自动铅笔", "画笔", "颜料"]
    },
    "subjects": {
        "id": "subjects",
        "name": "学科乐园",
        "icon": "📖",
        "keywords": ["数学", "语文", "英语", "科学", "历史", "地理", "音乐", "美术",
                    "体育", "化学", "物理", "生物"]
    },
    "nature": {
        "id": "nature",
        "name": "大自然",
        "icon": "🌳",
        "keywords": ["树", "花", "花朵", "草", "叶子", "树枝", "根", "种子", "山", "河",
                    "湖", "海洋", "森林", "草地", "沙漠", "岛屿", "峡谷", "山谷",
                    "悬崖", "洞穴", "小山", "冰川", "绿洲", "沙子", "土壤", "杂草"]
    },
    "weather": {
        "id": "weather",
        "name": "天气世界",
        "icon": "☀️",
        "keywords": ["晴天", "晴朗的", "阴天", "多云的", "雨天", "下雨的", "雪天", "下雪的",
                    "风", "有风的", "雷", "闪电", "云", "太阳", "月亮", "星星",
                    "彩虹", "雾", "冰雹", "暴风雨", "台风", "龙卷风", "干旱", "洪水"]
    },
    "space": {
        "id": "space",
        "name": "太空探索",
        "icon": "🚀",
        "keywords": ["火箭", "卫星", "宇航员", "太空", "宇宙", "星球", "地球", "月球",
                    "太阳", "火星", "恒星", "行星", "星座", "流星", "彗星", "极光",
                    "地球仪", "望远镜"]
    },
    "jobs": {
        "id": "jobs",
        "name": "职业大街",
        "icon": "👨‍⚕️",
        "keywords": ["医生", "护士", "老师", "教师", "警察", "消防员", "司机", "农民",
                    "厨师", "服务员", "清洁工", "邮递员", "图书管理员", "售货员",
                    "收银员", "理发师", "发型师", "画家", "歌手", "舞蹈家", "运动员",
                    "工程师", "建筑师", "飞行员", "空乘", "导游", "园丁", "木匠",
                    "水管工", "电工", "机械师", "客服", "病人", "乘客", "游客",
                    "艺术家", "救生员"]
    },
    "places": {
        "id": "places",
        "name": "地点探索",
        "icon": "🏪",
        "keywords": ["超市", "商店", "医院", "学校", "公园", "动物园", "图书馆", "博物馆",
                    "电影院", "餐厅", "咖啡馆", "银行", "邮局", "火车站", "机场",
                    "公交车站", "地铁站", "停车场", "加油站", "体育馆", "游泳池",
                    "游乐场", "农场", "工厂", "办公室", "酒店", "商场", "美食广场",
                    "理发店", "消防局", "警察局", "美发店", "健身房", "泳池", "售票机",
                    "安检", "登机口", "站台", "入口", "出口", "换乘"]
    },
    "toys": {
        "id": "toys",
        "name": "玩具乐园",
        "icon": "🧸",
        "keywords": ["玩具", "娃娃", "泰迪熊", "积木", "拼图", "球", "气球", "风筝",
                    "机器人", "遥控车", "滑板", "滑板车", "滑梯", "秋千", "跷跷板",
                    "木马", "陀螺", "悠悠球", "弹珠", "溜溜球", "折纸", "木偶",
                    "游戏机", "游戏手柄", "多米诺骨牌", "国际象棋", "棋盘游戏",
                    "宾果游戏", "捉迷藏", "捉人游戏", "攀爬架", "滑滑梯"]
    },
    "sports": {
        "id": "sports",
        "name": "运动场",
        "icon": "⚽",
        "keywords": ["足球", "篮球", "排球", "网球", "乒乓球", "羽毛球", "棒球", "高尔夫",
                    "游泳", "跑步", "跳绳", "滑冰", "滑雪", "骑自行车", "爬山", "徒步",
                    "拳击", "跆拳道", "柔道", "击剑", "体操", "保龄球", "射箭",
                    "划船", "冲浪", "攀岩", "瑜伽"]
    },
    "music": {
        "id": "music",
        "name": "音乐世界",
        "icon": "🎵",
        "keywords": ["钢琴", "吉他", "小提琴", "笛子", "鼓", "小号", "萨克斯", "口琴",
                    "唱歌", "跳舞", "音乐", "乐器", "演奏", "歌曲"]
    },
    "numbers": {
        "id": "numbers",
        "name": "数字王国",
        "icon": "🔢",
        "keywords": ["一", "二", "三", "四", "五", "六", "七", "八", "九", "十",
                    "百", "千", "万", "零"]
    },
    "shapes": {
        "id": "shapes",
        "name": "形状世界",
        "icon": "⭐",
        "keywords": ["圆形", "正方形", "三角形", "长方形", "椭圆形", "心形", "星形",
                    "菱形", "梯形", "平行四边形", "圆柱体", "正方体", "圆锥体", "球体"]
    },
    "bathroom": {
        "id": "bathroom",
        "name": "卫浴小屋",
        "icon": "🛁",
        "keywords": ["浴缸", "淋浴", "马桶", "洗手池", "镜子", "毛巾", "浴巾", "肥皂",
                    "洗发水", "沐浴露", "牙刷", "牙刷架", "牙膏", "吹风机", "梳子",
                    "发刷", "剃须刀", "剃刀", "浴袍", "浴帘", "浴室防滑垫", "卫生纸"]
    },
    "cleaning": {
        "id": "cleaning",
        "name": "清洁工具",
        "icon": "🧽",
        "keywords": ["扫帚", "拖把", "簸箕", "吸尘器", "抹布", "海绵", "刷子", "垃圾桶",
                    "垃圾袋", "洗洁精", "洗衣液", "清洁剂", "消毒剂", "玻璃清洁剂",
                    "纸巾", "厨房纸", "湿巾", "消毒湿巾", "空气清新剂", "粘毛器"]
    },
    "health": {
        "id": "health",
        "name": "健康小站",
        "icon": "💊",
        "keywords": ["医生", "护士", "医院", "诊所", "药", "药片", "胶囊药", "注射",
                    "注射器", "体温计", "温度计", "听诊器", "创可贴", "绷带", "纱布",
                    "医用胶带", "冰袋", "体检", "处方", "疫苗", "维生素"]
    },
    "symptoms": {
        "id": "symptoms",
        "name": "身体信号",
        "icon": "🤒",
        "keywords": ["发烧", "咳嗽", "打喷嚏", "头痛", "肚子痛", "胃痛", "牙痛", "喉咙痛",
                    "流鼻涕", "发痒", "头晕", "恶心", "疼痛", "划痕", "刺", "生病"]
    },
    "electronics": {
        "id": "electronics",
        "name": "电子产品",
        "icon": "💻",
        "keywords": ["电脑", "笔记本电脑", "平板电脑", "手机", "智能手机", "电话", "电视",
                    "相机", "游戏机", "游戏手柄", "耳机", "音响", "充电器", "充电宝",
                    "充电线", "USB线", "键盘", "鼠标", "显示器", "屏幕", "投影仪",
                    "打印机", "扫描仪", "路由器", "插线板", "电池", "遥控器",
                    "无人机", "卡"]
    },
    "appliances": {
        "id": "appliances",
        "name": "家用电器",
        "icon": "🏠",
        "keywords": ["冰箱", "洗衣机", "微波炉", "烤箱", "电视", "空调", "风扇", "吸尘器",
                    "电饭煲", "电磁炉", "热水器", "饮水机", "加湿器", "除湿机",
                    "空气净化器", "暖气", "吹风机", "烤面包机", "咖啡机", "豆浆机",
                    "榨汁机", "搅拌机", "熨斗", "台灯", "吸尘器"]
    },
    "shopping": {
        "id": "shopping",
        "name": "购物中心",
        "icon": "🛒",
        "keywords": ["购物车", "购物篮", "收银台", "收银员", "价格", "标签", "收据", "钱",
                    "现金", "卡", "信用卡", "促销", "折扣", "包装", "袋子", "盒子",
                    "点餐", "上菜", "享用", "等待"]
    },
    "travel": {
        "id": "travel",
        "name": "旅行天地",
        "icon": "✈️",
        "keywords": ["机场", "飞机", "登机牌", "登机口", "行李", "背包", "护照", "签证",
                    "地图", "指南针", "相机", "酒店", "旅馆", "帐篷", "登记", "安检",
                    "出发", "到达", "假期", "票", "时刻表"]
    },
    "road_signs": {
        "id": "road_signs",
        "name": "交通标志",
        "icon": "🚦",
        "keywords": ["红绿灯", "停止标志", "单行道标志", "禁止停车标志", "人行横道标志",
                    "自行车道标志", "并道标志", "绕行标志", "限速标志"]
    },
    "city": {
        "id": "city",
        "name": "城市探险",
        "icon": "🏙️",
        "keywords": ["街道", "马路", "人行道", "人行横道", "十字路口", "环岛", "桥", "隧道",
                    "建筑", "大楼", "房子", "家", "下水道"]
    },
    "sea": {
        "id": "sea",
        "name": "海洋世界",
        "icon": "🐋",
        "keywords": ["鱼", "鲨鱼", "海豚", "鲸鱼", "海龟", "海星", "水母", "章鱼", "螃蟹",
                    "虾", "贝壳", "珊瑚", "海藻", "海浪", "海滩", "沙滩伞", "冲浪板",
                    "潜水", "海洋", "海豹", "游泳圈", "水"]
    },
    "bedding": {
        "id": "bedding",
        "name": "床上用品",
        "icon": "🛏️",
        "keywords": ["床单", "被子", "棉被", "枕头", "枕套", "毯子", "床垫", "睡袋"]
    },
    "daily_items": {
        "id": "daily_items",
        "name": "日用品",
        "icon": "🧴",
        "keywords": ["钥匙", "锁", "钱包", "手提包", "背包", "雨伞", "手表", "闹钟",
                    "日历", "时钟", "镜子", "梳子", "剪刀", "指甲钳", "夹子", "橡皮筋",
                    "图钉", "别针", "胶带", "绳子", "袋子", "盒子", "瓶子", "罐子",
                    "桶", "塑料桶", "水桶", "篮子", "托盘", "垃圾桶", "衣架",
                    "晾衣架", "乳液", "化妆品", "香水", "口红", "面霜", "防晒霜",
                    "纸巾", "湿巾", "棉签", "棉球"]
    },
    "insects": {
        "id": "insects",
        "name": "昆虫世界",
        "icon": "🐛",
        "keywords": ["蝴蝶", "蜜蜂", "蚂蚁", "蜘蛛", "蚊子", "苍蝇", "蜻蜓", "瓢虫",
                    "毛毛虫", "蚱蜢", "甲虫", "萤火虫", "蟋蟀"]
    },
    "colors": {
        "id": "colors",
        "name": "颜色世界",
        "icon": "🎨",
        "keywords": ["红色", "黄色", "蓝色", "绿色", "橙色", "紫色", "粉色", "黑色",
                    "白色", "灰色", "棕色", "金色", "银色"]
    },
    "taste": {
        "id": "taste",
        "name": "味道体验",
        "icon": "😋",
        "keywords": ["甜", "酸", "苦", "辣", "咸", "美味", "好吃", "难吃", "新鲜",
                    "腐烂", "香", "臭", "清淡", "油腻", "脆", "软", "硬"]
    },
    "adjectives": {
        "id": "adjectives",
        "name": "描述词汇",
        "icon": "📝",
        "keywords": ["大", "小", "长", "短", "高", "矮", "胖", "瘦", "快", "慢",
                    "新", "旧", "冷的", "热的", "温暖的", "凉爽的", "干", "湿", "脏",
                    "干净", "重", "轻", "硬", "软", "粗糙", "光滑", "明亮", "黑暗",
                    "响", "安静", "饿", "渴的", "饱", "累", "困", "忙", "闲"]
    },
    "garden": {
        "id": "garden",
        "name": "花园小屋",
        "icon": "🌸",
        "keywords": ["花园", "花", "花朵", "玫瑰", "郁金香", "向日葵", "百合", "菊花",
                    "兰花", "草", "树", "灌木", "盆栽", "花盆", "浇水壶", "铲子",
                    "锄头", "园艺", "园丁", "种植", "浇花", "修剪", "施肥", "除草"]
    },
    "other": {
        "id": "other",
        "name": "其他",
        "icon": "📦",
        "keywords": []  # 收集所有未分类的单词
    }
}

def classify_word(word_cn):
    """根据中文词汇分类到对应主题"""
    for theme_id, theme_data in THEMES.items():
        if theme_id == "other":
            continue
        for keyword in theme_data["keywords"]:
            if keyword in word_cn:
                return theme_id
    return "other"

def main():
    # 读取 download_log.json
    with open("audio/download_log.json", "r", encoding="utf-8") as f:
        download_log = json.load(f)
    
    # 检查图片文件是否存在
    image_dir = Path("image")
    
    # 构建字典和课程
    dictionary = {}
    lessons_data = {theme_id: [] for theme_id in THEMES.keys()}
    
    print(f"开始处理 {len(download_log)} 个单词...")
    
    for word_cn, data in download_log.items():
        # 检查图片是否存在
        image_file = image_dir / f"{word_cn}.webp"
        if not image_file.exists():
            print(f"警告: 图片不存在 - {word_cn}.webp")
            continue
        
        # 检查音频是否存在
        audio_files = data.get("files", [])
        if not audio_files:
            print(f"警告: 音频不存在 - {word_cn}")
            continue
        
        # 使用第一个音频文件(通常是 _word.mp3)
        audio_file = None
        for f in audio_files:
            if "_word.mp3" in f:
                audio_file = f
                break
        if not audio_file:
            audio_file = audio_files[0]
        
        # 获取英文单词
        word_en = data.get("word", "")
        
        # 添加到字典
        dictionary[word_cn] = {
            "word_en": word_en,
            "word_cn": word_cn,
            "image": f"image/{word_cn}.webp",
            "audio": f"audio/{audio_file}"
        }
        
        # 分类到主题
        theme_id = classify_word(word_cn)
        lessons_data[theme_id].append(word_cn)
    
    # 构建课程列表(只包含有单词的课程)
    lessons = []
    for theme_id, theme_data in THEMES.items():
        word_keys = lessons_data[theme_id]
        if len(word_keys) > 0:
            lessons.append({
                "id": theme_id,
                "name": theme_data["name"],
                "icon": theme_data["icon"],
                "word_keys": word_keys,
                "word_count": len(word_keys)
            })
    
    # 按单词数量排序(从大到小)
    lessons.sort(key=lambda x: x["word_count"], reverse=True)
    
    # 构建最终数据库
    database = {
        "lessons": lessons,
        "dictionary": dictionary
    }
    
    # 保存到 database.json
    with open("database.json", "w", encoding="utf-8") as f:
        json.dump(database, f, ensure_ascii=False, indent=2)
    
    # 打印统计信息
    print("\n" + "="*50)
    print("数据库生成完成!")
    print("="*50)
    print(f"总单词数: {len(dictionary)}")
    print(f"总课程数: {len(lessons)}")
    print("\n课程详情:")
    for lesson in lessons:
        print(f"  {lesson['icon']} {lesson['name']}: {lesson['word_count']}个单词")
    
    # 显示未分类的单词
    if "other" in lessons_data and len(lessons_data["other"]) > 0:
        print(f"\n未分类单词 ({len(lessons_data['other'])}个):")
        for word in lessons_data["other"][:20]:  # 只显示前20个
            print(f"  - {word}")
        if len(lessons_data["other"]) > 20:
            print(f"  ... 还有 {len(lessons_data['other']) - 20} 个")

if __name__ == "__main__":
    main()

